package com.hxzy.es.util;

import cn.hutool.json.JSONUtil;
import com.hxzy.common.enums.AckCode;
import com.hxzy.common.exception.ServiceException;
import com.hxzy.common.vo.R;

import java.util.List;

/**
 * 远程服务R 取得里面的数据，转换成指定的对象
 *
 * @author tonneyyy
 */
public class JsonToBeanUtil {

    /**
     * 把R转换成指定的对象
     * @param r
     * @param cls
     * @param <T>
     * @return
     */
    public static <T> T  toObject(R  r ,Class<T> cls){
        if(r.getCode()== AckCode.SUCCESS.code){
            Object obj= r.getData();
            //把对象，转换成字符串
            String jsonStr= JSONUtil.toJsonStr(obj);
            //再把字符串，还原成对象
            T bean = JSONUtil.toBean(jsonStr, cls);
            return bean;
        }else{
            //查询过来的错误，再把它抛出
            AckCode fail = AckCode.FAIL;
            fail.setCode(r.getCode());
            fail.setMsg(r.getMsg());
            throw new ServiceException(fail);
        }
    }

    /**
     * 把R转换成指定的List集合
     * @param r
     * @param cls
     * @param <T>
     * @return
     */
    public static <T> List<T> toList(R  r , Class<T> cls){
        if(r.getCode()== AckCode.SUCCESS.code){
            Object obj= r.getData();
            //把对象，转换成字符串
            String jsonStr= JSONUtil.toJsonStr(obj);
            //再把字符串，还原成对象
            List<T> ts = JSONUtil.toList(jsonStr, cls);
            return ts;
        }else{
            //查询过来的错误，再把它抛出
            AckCode fail = AckCode.FAIL;
            fail.setCode(r.getCode());
            fail.setMsg(r.getMsg());
            throw new ServiceException(fail);
        }

    }

}
